/**
 * 加密Ajax请求封装
 * 
 * @author ruoyi
 */
(function($) {
    // 保存原始的jQuery ajax方法
    var originalAjax = $.ajax;
    
    // 重写jQuery ajax方法，添加加密功能
    $.ajax = function(options) {
        // 判断是否需要加密
        // 排除文件上传请求（FormData类型）和已设置contentType为false的请求
        if (options.encrypt !== false && 
            options.type && 
            options.type.toLowerCase() === 'post' && 
            options.data && 
            !(options.data instanceof FormData) && 
            options.contentType !== false) {
            try {
                // 处理数据格式
                var dataStr;
                if (typeof options.data === 'string') {
                    dataStr = options.data;
                } else if (Array.isArray(options.data)) {
                    // 如果是数组格式（如serializeArray的结果），转换为对象
                    var dataObj = {};
                    for (var i = 0; i < options.data.length; i++) {
                        var item = options.data[i];
                        if (item.name && item.value !== undefined) {
                            dataObj[item.name] = item.value;
                        }
                    }
                    dataStr = JSON.stringify(dataObj);
                } else {
                    dataStr = JSON.stringify(options.data);
                }
                
                // 加密数据
                var encryptedData = ApiEncrypt.encrypt(dataStr);

                // 替换原始数据为加密数据
                options.data = encryptedData;
                
                // 修改Content-Type为纯文本
                options.contentType = 'text/plain';
                
                // 保存原始success回调
                var originalSuccess = options.success;
                
                // 重写success回调，添加解密功能
                if (originalSuccess && typeof originalSuccess === 'function') {
                    options.success = function(response) {

                        
                        // 尝试解密响应数据
                        try {
                            if (typeof response === 'string' && response.trim()) {

                                // 去除首尾双引号
                                const encryptedData = response.replace(/^"|"$/g, '');

                                var decryptedResponse = ApiEncrypt.decrypt(encryptedData);
                                
                                if (decryptedResponse && decryptedResponse.trim()) {
                                    // 尝试将解密后的字符串转为JSON对象
                                    try {
                                        var jsonResponse = JSON.parse(decryptedResponse);

                                        originalSuccess(jsonResponse);
                                    } catch (e) {

                                        // 如果解析JSON失败，则直接返回解密后的字符串
                                        originalSuccess(decryptedResponse);
                                    }
                                } else {

                                    // 解密失败，返回原始响应
                                    originalSuccess(response);
                                }
                            } else {

                                // 如果响应不是字符串，则直接返回原始响应
                                originalSuccess(response);
                            }
                        } catch (e) {

                            // 如果解密失败，则直接返回原始响应
                            originalSuccess(response);
                        }
                    };
                }
            } catch (e) {

            }
        }
        
        // 调用原始的ajax方法
        return originalAjax.apply($, arguments);
    };
})(jQuery);